package com.weipu.common.facade;

import java.util.ArrayList;
import java.util.List;

import com.weipu.common.constants.ServerConstant.CouponActive;
import com.weipu.common.facade.exception.DxException;
import com.weipu.common.facade.model.CouponActiveModel;
import com.weipu.common.facade.model.CouponModel;
import com.weipu.common.facade.model.Lines;
import com.weipu.common.facade.model.PreviewOrderModel;
/**
 * @author TonyYang 与Coupon相关的服务接口
 */
public interface CouponServiceProvider {

	/**
	 * 描述：查询对应Customer可用的Coupon数量
	 * @param CustomerID 顾客标识ID
	 * @param SiteID 站点ID
	 * @param SiteClient 客户端类型（PC、MobileApp、MobileWed、Pad）
	 * @return 查询的数量值
	 */
	int FindValidCouponsCount(long CustomerID,int SiteID,int SiteClient,String token)
			throws DxException;
	
	/**
	 * 描述：查询Customer下的所有手动Coupon
	 * @param CustomerID 顾客标识ID
	 * @param SiteID 站点ID
	 * @param SiteClient  客户端类型（PC、MobileApp、MobileWed、Pad）
	 * @param Status 活动状态数组，为空则返回所有状态下的Coupon，值为（NotUsed,Used,Expired）
	 * @param PageIndex 页码，从0开始
	 * @param PageSize 每页显示的条数
	 * @return 查询到的Coupon集合
	 */
	ArrayList<CouponModel> FindCustomerCoupons(long CustomerID,int SiteID,int SiteClient,String[] Status,int PageIndex,int PageSize,String token)
	throws DxException;
	
	/**
	 * 描述：查询当前可用的Coupon，在CouponMarket展示并提供领用
	 * @param CustomerID 顾客标识ID
	 * @param SiteID 站点ID
	 * @param SiteClient  客户端类型（PC、MobileApp、MobileWed、Pad）
	 * @param PageIndex 页码，从0开始
	 * @param PageSize 每页显示的条数
	 * @return 查询到的Coupon集合
	 */
	ArrayList<CouponModel> FindMarketCoupons(long CustomerID,int SiteID,int SiteClient,int PageIndex,int PageSize)
	throws DxException;
	
	/**
	 * 描述：绑定Coupon，即 领取Coupon
	 * @param CustomerID  顾客标识ID
	 * @param CouponCode
	 * @return 绑定是否成功
	 */
	void BindCoupon(long CustomerID,String CouponCode,String token)
			throws DxException;
	
	/**
	 * 描述：预览订单创建的结果，增强用户体验，但不会持久化到数据库中。
	 * @param SalesChannelType
	 * 		销售模式(值为Retail、Wholesale、DropShipping、GroupBuying、InstantBuying）
	 * @param BulkRateEnabled
	 * 		是否启用BulkRate服务
	 * @param EstimatesShippingFees
	 * 		是否估计各种运输方式的运费
	 * @param ShippingMethod
	 * 		运输方式（SuperSaver、Standard、Expedited）
	 * @param CountryCode
	 * 		收货国家（AF、AS、AX等等）
	 * @param IsAnonymousCustomer
	 * 		是否为匿名用户
	 * @param CustomerID
	 * 		用户ID
	 * @param CurrencyCode
	 * 		货币代码，缺省USD
	 * @param WHID
	 * 		仓库编号，缺省HK仓
	 * @param Lines
	 * 		订单明细（产品SKU，产品数量， 产品价格）
	 * @param CouponCode
	 * 		优惠券
	 * @param notSelectedSkus
	 * @return
	 * @throws DxException
	 */
//	PreviewOrderModel PreviewOrder(int CustomerID,String SalesChannelType,String CurrencyCode,int WHID,
//			List<Lines> Lines,boolean BulkRateEnabled,boolean EstimatesShippingFees,
//			String ShippingMethod,String CountryCode,String CouponCode,boolean IsAnonymousCustomer)
//			throws DxException;
	PreviewOrderModel PreviewOrder(int CustomerID, String CurrencyCode, int WHID,
								   List<Lines> Lines, String CouponCode, String currencyCode, String token, List<Integer> NotSelectedSkus)
			throws DxException;
	
	/**
	 * 删除用户Coupon
	 * @param customerId 用户ID
	 * @param couponCode 需要删除CouponCode
	 * @return
	 * @throws DxException
	 */
	String DeleteUserCoupon(long customerId,String couponCode,String token) throws DxException;
	
	/**
	 * 获取Coupon活动数据（产品、分类）
	 * @param couponCode 
	 * @param pageSize  产品每页数量
	 * @param pageIndex  页数
	 * @param categoryId 分类id
	 * @return
	 * @throws DxException
	 */
	CouponActiveModel FindDiscountProducts(String couponCode,int pageSize,int pageIndex,int categoryId,String orderbyField,
			long customerID,boolean isFilter,String catrgoryIds) throws DxException;
}
